
#include"variables.hpp"

/*########################################################################################################

  Funcions de la classe variables
  
  La clase variables s'encarrega de les operacions amb byte, char y hex.
  
  ######################################################################################################*/

byte::byte() {_data = 0;}

byte::byte(const byte& pByte) {_data = pByte._data;}

byte::byte(const char& pChar) {_data = pChar;}

byte byte::operator=(const byte& pByte) {_data = pByte._data; return *this;}

byte byte::operator=(const char& pChar)	{_data = pChar; return _data;}

bool byte::getBit(const int& pBit) const{
	char c = 0;
	if(pBit==0) c = _data & 0x01;
	if(pBit==1) c = _data & 0x02;
	if(pBit==2) c = _data & 0x04;
	if(pBit==3) c = _data & 0x08;
	if(pBit==4) c = _data & 0x10;
	if(pBit==5) c = _data & 0x20;
	if(pBit==6) c = _data & 0x40;
	if(pBit==7) c = _data & 0x80;
	if(c==0) return false;
	else return true;
}

std::pair<char,char> byte::toHex() const{
	std::pair<char,char> res;
	res.first = _data & 0x0F;
	res.second  = (_data & 0xF0) >> 4;
	if (res.first < 10) res.first = res.first + 48;
	else res.first = res.first + 55;  //65-10
	if (res.second < 10) res.second = res.second + 48;
	else res.second = res.second + 55;  //65-10
	return res;
}

char byte::toChar() const {return _data;}

void byte::setBit(const int& pBit, const bool& pValue){
	//Si volem posar el bit a '1', apliquem màscara OR
	if (pValue) _data = _data | pValue;
	//Si volem posar el bit a '0', apliquem màscara inversa i AND
	else _data = _data & !pValue;
}

